Today's information technology creates enormous quantities of data. To comprehend this data, users frequently desire reports summarizing and arranging the data in a concise and readable fashion. For example, a complex computing environment may involve a substantial number of computing devices, network resources, software components and other objects that continuously perform operations, respond to inputs, produce events, generate outputs and otherwise produce huge amounts of recordable data. Moreover, different users often need different types of reports. For instance, a report detailing financial transactions may be interesting to an officer in the accounts receivable department, but wholly uninteresting to a supply chain manager.
To address these needs, programmers often create specialized reporting tools for complex software systems. The programmers typically code and compile the reporting tools and distribute the tools to customers purchasing the software systems.
However, it is often difficult for the programmers of reporting tools to anticipate all of the types of reports needed by all the different classes of potential users. Often, programmers create reports tools that a particular customer does not need, and fail to create all of the reports actually needed by the customer. Programming and debugging these unneeded reporting tools adds cost to the software system. In addition, the unneeded reporting tools increase the size of the software system, consuming valuable storage space and increasing the need for software updates. Moreover, a need for a new type of report often arises after the customer purchases the software system due to changing environment in which the system operates.